import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { globalMiddleware } from './common/middleware/global.middleware';
import { createSwagger } from './common/swagger';
import { HttpExceptionFilter } from './filter/http-exception.filter';
import { ResponseInterceptor } from './interceptor/response.interceptor';
import compression from 'compression';
// import * as compression from 'compression'; 报错： TypeError: _compression is not a function

async function bootstrap() {
  const port = process.env.PORT ?? 3000;

  const app = await NestFactory.create(AppModule);
  // 设置全局路由前缀
  app.setGlobalPrefix('api');
  // 全局 http 错误
  app.useGlobalFilters(new HttpExceptionFilter());
  app.useGlobalInterceptors(new ResponseInterceptor());
  // 全局中间件
  app.use(globalMiddleware);
  // 压缩可以大大减小响应主体的大小，从而提高 Web 应用的速度
  // 对于生产中的高流量网站，强烈建议从应用服务器卸载压缩 - 通常在反向代理中（例如 Nginx）。在那种情况下，你不应该使用压缩中间件。
  app.use(compression());

  createSwagger({ app, port });

  await app.listen(port, () => {});
  console.log(
    'port: ',
    '服务启动成功：',
    (await app.getUrl()) + '/swagger/api',
  );
}
bootstrap();
